package mapper

//go:generate go install github.com/golang/mock/mockgen@v1.7.0-rc.1
//go:generate mockgen -source=db_mapper.go -destination=../mocks/mock_db_mapper.go -package=mocks
type DBMapper[T any] interface {
	// SelectById 查询单个节点 根据id
	SelectById(id any) (*T, error)
	// SelectDescendentAndLockByTreeId 查询并锁定指定顶级节点下的所有子节点
	SelectDescendentAndLockByTreeId(treeId any) ([]*T, error)
	// SelectDescendentById 查询指定点下的所有子节点
	SelectDescendentById(id any) ([]*T, error)
	// SaveOrUpdate 保存或更新
	SaveOrUpdate(node *T) error
	// UpdateBatch 批量更新
	UpdateBatch(nodes []*T) error
	// DeleteById 删除节点
	DeleteById(id any) error

	// SelectAllTopParentId 查询所有顶级父节点
	SelectAllTopParentId() ([]*T, error)
	// SelectAllByParentIdAsc 按照parentId升序查找所有节点
	SelectAllByParentIdAsc(topParentId any) ([]*T, error)
	// UpdateNewNode 更新节点信息
	UpdateNewNode(mod *T) error
}
